#include "gdkpipeiostreamprivate.h"
#include "gdktexture.h"
+#include <gobject/gvaluecollector.h>
+
/**
* SECTION:gdkclipboard
* @Short_description: Share data between applications for Copy-and-Paste
}
/**
- * gdk_clipboard_set_text:
+ * gdk_clipboard_set:
* @clipboard: a #GdkClipboard
- * @text: Text to put into the clipboard
+ * @type: type of value to set
+ * @...: value contents conforming to @type
*
- * Puts the given @text into the clipboard.
+ * Sets the clipboard to contain the value collected from the given
+ * varargs.
**/
void
-gdk_clipboard_set_text (GdkClipboard *clipboard,
- const char *text)
+gdk_clipboard_set (GdkClipboard *clipboard,
+ GType type,
+ ...)
+{
+ va_list args;
+
+ g_return_if_fail (GDK_IS_CLIPBOARD (clipboard));
+
+ va_start (args, type);
+ gdk_clipboard_set_valist (clipboard, type, args);
+ va_end (args);
+}
+
+/**
+ * gdk_clipboard_set_valist: (skip)
+ * @clipboard: a #GdkClipboard
+ * @type: type of value to set
+ * @args: varargs containing the value of @type
+ *
+ * Sets the clipboard to contain the value collected from the given
+ * @args.
+ **/
+void
+gdk_clipboard_set_valist (GdkClipboard *clipboard,
+ GType type,
+ va_list args)
{
- GdkContentProvider *provider;
GValue value = G_VALUE_INIT;
+ char *error;
g_return_if_fail (GDK_IS_CLIPBOARD (clipboard));
- g_value_init (&value, G_TYPE_STRING);
- g_value_set_string (&value, text);
- provider = gdk_content_provider_new_for_value (&value);
+ G_VALUE_COLLECT_INIT (&value, type,
+ args, G_VALUE_NOCOPY_CONTENTS,
+ &error);
+ if (error)
+ {
+ g_warning ("%s: %s", G_STRLOC, error);
+ g_free (error);
+ /* we purposely leak the value here, it might not be
+ * in a sane state if an error condition occoured
+ */
+ return;
+ }
+
+ gdk_clipboard_set_value (clipboard, &value);
g_value_unset (&value);
+}
+
+/**
+ * gdk_clipboard_set_value: (rename-to gdk_clipboard_set)
+ * @clipboard: a #GdkClipboard
+ * @value: a #GValue to set
+ *
+ * Sets the @clipboard to contain the given @value.
+ **/
+void
+gdk_clipboard_set_value (GdkClipboard *clipboard,
+ const GValue *value)
+{
+ GdkContentProvider *provider;
+
+ g_return_if_fail (GDK_IS_CLIPBOARD (clipboard));
+ g_return_if_fail (G_IS_VALUE (value));
+
+ provider = gdk_content_provider_new_for_value (value);
gdk_clipboard_set_content (clipboard, provider);
g_object_unref (provider);
}
/**
- * gdk_clipboard_set_texture:
+ * gdk_clipboard_set_text: (skip)
+ * @clipboard: a #GdkClipboard
+ * @text: Text to put into the clipboard
+ *
+ * Puts the given @text into the clipboard.
+ **/
+void
+gdk_clipboard_set_text (GdkClipboard *clipboard,
+ const char *text)
+{
+ g_return_if_fail (GDK_IS_CLIPBOARD (clipboard));
+
+ gdk_clipboard_set (clipboard, G_TYPE_STRING, text);
+}
+
+/**
+ * gdk_clipboard_set_texture: (skip)
* @clipboard: a #GdkClipboard
* @texture: a #GdkTexture to put into the clipboard
*
gdk_clipboard_set_texture (GdkClipboard *clipboard,
GdkTexture *texture)
{
- GdkContentProvider *provider;
- GValue value = G_VALUE_INIT;
-
g_return_if_fail (GDK_IS_CLIPBOARD (clipboard));
g_return_if_fail (GDK_IS_TEXTURE (texture));
- g_value_init (&value, GDK_TYPE_TEXTURE);
- g_value_set_object (&value, texture);
- provider = gdk_content_provider_new_for_value (&value);
- g_value_unset (&value);
-
- gdk_clipboard_set_content (clipboard, provider);
- g_object_unref (provider);
+ gdk_clipboard_set (clipboard, GDK_TYPE_TEXTURE, texture);
}
if (!gtk_text_iter_equal (&start, &end))
{
GtkTextBuffer *contents;
+ GdkContentProvider *provider;
+ GValue value = G_VALUE_INIT;
contents = create_clipboard_contents_buffer (buffer, &start, &end);
- gdk_clipboard_set (clipboard, GTK_TYPE_TEXT_BUFFER, contents);
- g_object_unref (contents);
+
+ g_value_init (&value, GTK_TYPE_TEXT_BUFFER);
+ g_value_take_object (&value, contents);
+
+ provider = gdk_content_provider_new_for_value (&value);
+ g_value_unset (&value);
+
+ gdk_clipboard_set_content (clipboard, provider);
+ g_object_unref (provider);
if (delete_region_after)
{